package com.appleyk.core.model;

import com.appleyk.core.helper.ParamInitHelper;
import de.schlichtherle.license.LicenseContent;
import de.schlichtherle.license.LicenseManager;
import de.schlichtherle.license.LicenseParam;

import java.io.File;
import java.text.MessageFormat;


/**
 * @Author: WangYao
 * @description: 系统软件证书生成管理器
 * @date: 2024-05-08 11:16
 */
public class LicenseCreatorManager {

    private LicenseCreatorParam param;

    public LicenseCreatorManager(LicenseCreatorParam param) {
        this.param = param;
    }

    /**
     * <p>生成License证书</p>
     *
     * @return GxLicenseResult 证书生成结果
     */
    public LicenseResult generateLicense() {
        try {
            // 1、根据外部传入的创建Lic的参数信息初始化lic参数（秘钥部分）
            LicenseParam licenseParam = ParamInitHelper.initLicenseParam(param);
            // 2、根据外部传入的创建Lic的属性信息初始化lic内容（除了truelicense自带的还包括自己定义的）
            LicenseContent licenseContent = ParamInitHelper.initLicenseContent(param);
            // 3、构建Lic管理器
            LicenseManager licenseManager = new LicenseCustomManager(licenseParam);
            // 4、根据param传入的lic生成的路径创建空文件
            File licenseFile = new File(this.param.getLicensePath());
            // 5、通过Lic管理器，将内容写入Lic文件中
            licenseManager.store(licenseContent, licenseFile);
            return new LicenseResult("证书生成成功！", licenseContent);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            String message = MessageFormat.format("证书生成失败！：{0}", param);
            System.out.println("message = " + message);
            e.printStackTrace();
            return new LicenseResult(String.format("证书文件生成失败！原因：%s", e.getMessage()), e);
        }
    }
}
